home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 011-020 / amok12 / module / timer2.mod < prev    next >
Text File  |  1993-11-04  |  2KB  |  102 lines

  1. (*---------------------------------------------------------------------------
  2.     :Program.    Timer2.mod
  3.     :Author.     Bernd Preusing
  4.     :Address.    Gerhardstr. 16  D-2200 Elmshorn
  5.     :Phone.      04121/22486
  6.     :Shortcut.   [bep]
  7.     :Version.    1.0
  8.     :Date.       21-Oct-88
  9.     :Copyright.  PD
  10.     :Language.   Modula-II
  11.     :Translator. M2Amiga
  12.     :Imports.    ---
  13.     :UpDate.     
  14.     :Contents.   Procedures to handle time and date.
  15.     :Remark.     
  16. ---------------------------------------------------------------------------*)
  17. IMPLEMENTATION MODULE Timer2;
  18.  
  19. FROM SYSTEM IMPORT
  20.     ADR, ADDRESS;
  21.  
  22. FROM Exec IMPORT
  23.     quick, execBase, FindName;
  24.  
  25. FROM Timer IMPORT
  26.     timerName, getSysTime, TimeRequest;
  27.  
  28.  
  29. CONST    (* Register *)
  30.     A0 = 0+8;  A1 = 1+8; A6 = 6+8;
  31.  
  32. VAR
  33.     TimerBase: ADDRESS;
  34.     MyIO: TimeRequest;
  35.     Time1: TimeVal;
  36.  
  37.  
  38. (* Dies geht nur ohne OpenDevice, weil keine Unit benötigt wird und
  39.    das timer.device ganz sicher offen ist und wg. Quick-IO!!!! *)
  40.  
  41. (* Hilfsprozeduren:
  42.    Achtung: diese können niemals exportiert werden, weil sonst
  43.    die Übergabe in A6 nicht funktioniert!
  44. *)
  45. PROCEDURE BeginIO(base{A6}:ADDRESS; TimeReq{A1}:ADDRESS);
  46. CODE -30;
  47.  
  48. PROCEDURE AddT(base{A6}:ADDRESS; dest{A0},source{A1}:ADDRESS);
  49. CODE -42;
  50.  
  51. PROCEDURE SubT(base{A6}:ADDRESS; dest{A0},source{A1}:ADDRESS);
  52. CODE -48;
  53.  
  54. PROCEDURE CmpT(base{A6}:ADDRESS; t0{A0},t1{A1}:ADDRESS):INTEGER;
  55. CODE -54;
  56.  
  57.  
  58. PROCEDURE AddTime(VAR dest,source: TimeVal); (* dest:=dest+source *)
  59. BEGIN
  60.   AddT(TimerBase,ADR(dest),ADR(source))
  61. END AddTime;
  62.  
  63. PROCEDURE SubTime(VAR dest,source: TimeVal); (* dest:=dest-source *)
  64. BEGIN
  65.   SubT(TimerBase,ADR(dest),ADR(source))
  66. END SubTime;
  67.  
  68. (* $F- *)
  69. PROCEDURE CmpTime(VAR d1,d2:TimeVal): INTEGER; (* -1: d2<d1  1: d2>d1  0: d1=d2 *)
  70. BEGIN
  71.   RETURN CmpT(TimerBase,ADR(d1),ADR(d2))
  72. END CmpTime;
  73.  
  74. PROCEDURE GetSysTime(VAR t: TimeVal);
  75. BEGIN
  76.   BeginIO(TimerBase,ADR(MyIO));
  77.   t:=MyIO.time
  78. END GetSysTime;
  79.  
  80.  
  81. PROCEDURE StartTime();
  82. BEGIN
  83.   GetSysTime(Time1)
  84. END StartTime;
  85.  
  86. PROCEDURE StopTime(VAR t:TimeVal); (* Differenz seit StartTime *)
  87. BEGIN
  88.   GetSysTime(t);
  89.   SubT(TimerBase,ADR(t),ADR(Time1));
  90. END StopTime;
  91.  
  92. BEGIN
  93.   TimerBase:=FindName(ADR(execBase^.deviceList),ADR(timerName));
  94.   IF TimerBase=NIL THEN HALT END; (* unmöglich! *)
  95.   WITH MyIO.node DO
  96.     device:=NIL; (* vorsichtshalber *)
  97.     unit:=NIL;
  98.     command:=getSysTime;
  99.     flags:=quick (* handling ohne MessagePort *)
  100.   END;
  101. END Timer2.mod
  102.